knapsack problem backtracking